Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Web service Exception

Îåêßíçóå áðü ôï ìÝëïò axaros. Τελευταία δημοσίευση από το μέλος axaros στις 13-03-2007, 12:30. Υπάρχουν 3 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  12-03-2007, 12:40 26326

    Web service Exception

    Καλημέρα σε όλους !
    Αντιμετωπίζω το εξής πρόβλημα : προσπαθώ να ενημερώσω μία SQL Server 2005 βάση με ένα web service. Τα αντικείμενα που περνάω στο web method είναι αρκετά βαριά αφού αφορούν φωτογραφίες και τα metadata τους.

    To exception που παίρνω είναι :

    "Unable to write data to the transport connection: An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full."

    Προφανώς το πρόβλημα έχει να κάνει με το πλήθος (και φυσικά το μέγεθος) των αντικειμένων που προσπαθώ να περάσω στο service, αφού αν στείλω κάποιον συγκεκριμένο αριθμό όλα πάνε πρίμα ....

    Προσπάθησα να "παίξω"  με τα settings του request χωρίς επιτυχία :

    <httpRuntime maxRequestLength="2097151" executionTimeout="180" requestLengthDiskThreshold="2097151"/>

    Καμία ιδέα ;

    Το ίδιο πρόβλημα έχει και ο τύπος εδώ :

    http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=369779&SiteID=1

     


    Πάνος Αβραμίδης
  •  12-03-2007, 20:07 26351 σε απάντηση της 26326

    Απ: Web service Exception

    Το μήνυμα λάθους παραπέμπει μάλλον στο επίπεδο του TCP παρά του HTTP.

    Νατάσα Μανουσοπούλου
  •  13-03-2007, 09:50 26371 σε απάντηση της 26326

    Απ: Web service Exception

    Ίσως αν το προσπαθήσεις να βρεις που είναι το πρόβλημα και να το λύσεις, αλλά νομίζω ότι το web service ως RPC (remote procedure call) δεν είναι ότι καλύτερο για μεταφορά αρχείου. Εγώ θα πρότεινα να χρησιμοποιήσεις είτε ένα HTTPHandler είτε MTOM. Και επεξηγώ...

    HTTPHandler

    Ουσιαστικά θα κάνεις αυτό που γίνεται όταν σε μια σελίδα επιλέγεις ένα αρχείο με το κλασικό browse button και πατάς αποστολή.

    Server code:    

        (Αρχικά πάτα WebSite>Add New Item>Generic Handler)

        Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
            Dim counter As Integer = 0
            For Each file As HttpPostedFile In context.Request.Files
                file.SaveAs("postedFile" & counter)
            Next
        End Sub

    Client Code:

        Dim webClient As New System.Net.WebClient()
        webClient.UploadFile("http://myServer/myApp/myHttpHandler.ashx", "c:\myFile.dat")

    MTOM

    (από wikipedia) MTOM is the W3C Message Transmission Optimization Mechanism, a method of efficiently sending binary data to and from web services. It uses XOP (XML-binary Optimized Packaging) to transmit binary data and is intended to replace both MIME and DIME attachments.

    Παράδειγμα εδώ: http://www.codeproject.com/soap/MTOMWebServices.asp


    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  13-03-2007, 12:30 26384 σε απάντηση της 26371

    Απ: Web service Exception

    Δημήτρη, Νατάσα συγκεκριμένα προσπαθώ να περάσω ένα Array από :

    [Serializable]
    public class tblPhotos: CommonObject_withID
    {
    private string _PhotoCode;
    public string PhotoCode
    {
       
    get { return _PhotoCode; }
       
    set { _PhotoCode = value; }
    }

    private string _Title;
    public string Title
    {
       
    get { return _Title; }
       
    set { _Title = value; }
    }

    private string _Description;
    public string Description
    {
       
    get { return _Description; }
       
    set { _Description = value; }
    }

    private string _Photographer;
    public string Photographer
    {
       
    get { return _Photographer; }
       
    set { _Photographer = value; }
    }

    private DateTime _PhotoDate;
    public DateTime PhotoDate
    {
       
    get { return _PhotoDate; }
       
    set { _PhotoDate = value; }
    }

    private string _Locality;
    public string Locality
    {
       
    get { return _Locality; }
       
    set { _Locality = value; }
    }

    private byte[] _MainPhoto;
    public byte[] MainPhoto
    {
       
    get { return _MainPhoto; }
       
    set { _MainPhoto = value; }
    }

    private byte[] _Thumpnail;
    public byte[] Thumpnail
    {
       
    get { return _Thumpnail; }
       
    set { _Thumpnail = value; }
    }

    }

    στο

    [WebMethod]
    public string GetData(BusinessLogic.DataMapping.tblPhotos[] PhotosData)


       
    SqlConnection oSQLConn = null
       SqlCommand InsertPhotos = null;
       string retval = "Failure";

    try

    {

       oSQLConn = new SqlConnection(ConfigurationManager.AppSettings["ConnectionInfo"]); 
       oSQLConn.Open();
       InsertPhotos =
    new SqlCommand();
       InsertPhotos.CommandText =
    "procCommonInsert_tblPhotos";
       InsertPhotos.CommandTimeout =
    int.Parse(ConfigurationManager.AppSettings["CommandTimeout"]);
       InsertPhotos.CommandType =
    CommandType.StoredProcedure;
       InsertPhotos.Connection = oSQLConn;
       
    foreach (tblPhotos MyPhoto in PhotosData)
          {
             InsertPhotos.Parameters.Add(
    new SqlParameter("@PhotoCode", (MyPhoto.PhotoCode != null ? MyPhoto.PhotoCode : SqlString.Null)));
             InsertPhotos.Parameters.Add(
    new SqlParameter("@Title", (MyPhoto.Title != null ? MyPhoto.Title : SqlString.Null)));
             
    InsertPhotos.Parameters.Add(new SqlParameter("@Description", (MyPhoto.Description != null ? MyPhoto.Description : SqlString.Null)));
             InsertPhotos.Parameters.Add(
    new SqlParameter("@Photographer", (MyPhoto.Photographer != null ? MyPhoto.Photographer :
             
    SqlString.Null)));
             InsertPhotos.Parameters.Add(
    new SqlParameter("@PhotoDate", (MyPhoto.PhotoDate.ToString("dd/MM/yyyy") != "01/01/1800" ?   
             
    MyPhoto.PhotoDate : SqlDateTime.Null)));
             InsertPhotos.Parameters.Add(
    new SqlParameter("@Locality", (MyPhoto.Locality != null ? MyPhoto.Locality : SqlString.Null)));


             
    if (MyPhoto.MainPhoto != null)
                InsertPhotos.Parameters.Add(
    new SqlParameter("@MainPhoto", (MyPhoto.MainPhoto)));
             
             
    if (MyPhoto.Thumpnail != null)
                InsertPhotos.Parameters.Add(
    new SqlParameter("@Thumpnail", (MyPhoto.Thumpnail)));
             
             
    InsertPhotos.ExecuteNonQuery();
             InsertPhotos.Parameters.Clear();
          }

          retval = "Success";

    }

    catch (Exception ex)

       {
          throw new System.Exception("ŠαŸ¦ " + InsertPhotos.CommandText + " : " + ex.Message);
       }

    finally

       
    if (oSQLConn != null)
       {
          
    if (oSQLConn.State != ConnectionState.Closed)
             {
                oSQLConn.Close();
                oSQLConn.Dispose();
             }
       }

    }

    return retval;

    }

     

     

     


    Πάνος Αβραμίδης
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems